package smallfrench.ui;

import java.util.HashMap;

import javax.swing.text.AttributeSet;

import smallfrench.moteur.biblio.BibliothequeStandard;
import smallfrench.moteur.interp.RObjet;
import smallfrench.moteur.lexer.lexemes.Lexeme;
import smallfrench.moteur.lexer.lexemes.LexemeIdent;

/**
 * Représente un lexème (ou token) coloré.
 * @author antoine1023
 *
 */
public class LexemeColore {

	private AttributeSet style;

	private int position;
	private int longueur;

	private static final HashMap<String, RObjet> bibliotheque =
			BibliothequeStandard.getMapBibliotheque();

	/**
	 * Crée un nouveau LexemeColore.
	 * @param token
	 */
	public LexemeColore(Lexeme token) {

		switch (token.type) {

		case COMMENTAIRE_BLOC: case COMMENTAIRE_LIGNE:
			style = Styles.COMMENTAIRE;
			break;



		case CONST_ENTIER: case CONST_FLOTTANT:
		case CONST_CHAINE:
			style = Styles.CHAINE;
			break;



		case VAR: case CLASSE: case MOI: case CONSTRUCTEUR:

		case SI: case OUSI: case SINON:

		case ESSAYER: case SIEXCEPTION:

		case RETOUR:

		case TANTQUE: case POURCHAQUE: case DANS: case FINBOUCLE:

		case CLASSEDE:
		case CONST_VRAI: case CONST_FAUX: case CONST_RIEN:
		case ESTUN:
		case NON: case ET: case OU: case OUEX:
		case EST: case PAS:
		case EGAL: case INEGAL: case SUP: case INF:
		case SUPEGAL: case INFEGAL:
		case MODULO:
			style = Styles.MOT_CLE;
			break;


		case IDENTIFICATEUR:
			if (bibliotheque.containsKey(
					((LexemeIdent)token).ident)) {
				style = Styles.CLASSE_BIBLIO;
			} else {
				style = Styles.NORMAL;
			}
			break;

		default:
			style = Styles.NORMAL;
			break;
		}

		position = token.debut.index;
		longueur = token.fin.index - position;
	}


	public int getPosition() {
		return position;
	}


	public int getLongueur() {
		return longueur;
	}


	public AttributeSet getStyle() {
		return style;
	}

}
